/**
 * 
 */
package ar.edu.unq.svnpermission.ui.pages;

import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import ar.edu.unq.svnpermission.ui.exceptions.InvalidLoginException;
import ar.edu.unq.svnpermission.ui.model.Login;


/**
 * @author nicolas
 */
public class LoginPage extends PageTemplate<Login> {

	public final static String FORM = "loginForm";
	
	public LoginPage()
	{
		super();
	}
	
	
	/**
	 * Crea el modelo del formulario que sera' el caso de uso.
	 */
	protected CompoundPropertyModel<Login> createModel() {
		return new CompoundPropertyModel<Login>(new Login());
	}
	
	/**
	 * Crea y agrega los controles para editar el nuevo cliente.
	 * @author nicolas
	 */
	@Override
	protected void addFields() {
		this.getForm().add(new TextField<String>("userName"));
		this.getForm().add(new PasswordTextField("userPassword"));
		this.getForm().add(new FeedbackPanel("errorPanel"));

	}
	
	/**
	 * Crea y agrega los botones: aceptar y cancelar.
	 */
	@Override
	protected void addButtons() {
		
		//Agrego el boton para iniciar Sesión
		this.getForm().add(new Button("login") {

			private static final long serialVersionUID = 1L;

			@Override
			public void onSubmit() {
				try {
					//Implemento la logica de negocios del boton "Iniciar Sesion"
					((Login) this.getParent().getDefaultModelObject()).authenticate();
					this.setResponsePage(new PermissionManagerPage());
				}
				catch (InvalidLoginException e) {
					// en caso de excepcion de negocio muestra el mensaje como un error.
					// Ej: nombre y/o direccion vacios.
					LoginPage.this.getForm().get("errorPanel").error(e.getMessage());
				}
			}
		});
		
		//Agrego el Link para crear el nuevo Usuario
		this.getForm().add(new Link("newuser"){
			private static final long serialVersionUID = 1L;

			@Override
			public void onClick() {
				this.setResponsePage(new NewUserPage());
				
			}
		});
			
	}

	/**
	 * Obtiene el nombre del Formulario
	 */
	@Override
	protected String getFormName() {
		return LoginPage.FORM;
	}

}
